package cl.solidit.geomanagement.persistance.model;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.springframework.format.annotation.DateTimeFormat;

@Entity
@Table(name = "visita")
public class Visita {
	@Id
	@GeneratedValue(strategy = GenerationType.TABLE)
	private Long id;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "propiedad", nullable = false)
	private Propiedad propiedad;
	@Column(name = "fecha_registro")
	private Date fechaRegistro;
	@Column(name = "fecha_programada")
	@DateTimeFormat(pattern = "yyyy-MM-dd")
	private Date fechaProgramada;
	@Column(name = "fecha_inicio")
	private Date fechaInicio;
	@Column(name = "fecha_termino")
	private Date fechaTermino;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "agente")
	private Usuario agente;
	@ManyToOne(fetch = FetchType.LAZY)
	@JoinColumn(name = "cliente")
	private Persona cliente;
	private String latitud;
	private String longitud;
	@Column(name = "llego_cliente")
	private Boolean llegoCliente;
	private Integer percepcion;
	@OneToMany(mappedBy = "visita", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
	private List<PreguntaRealizada> preguntasRealizadas = new ArrayList<PreguntaRealizada>(
			0);
	@Column(name = "observacion_cliente")
	private String observacionCliente;
	@Column(name = "observacion_agente")
	private String observacionAgente;
	@Column(name = "pregunta_compra")
	private String preguntaCompra;
	@Column(name = "pregunta_oferta")
	private String preguntaOferta;
	@Column(name = "oferta_valor")
	private BigDecimal ofertaValor;
	

	public Visita() {

	}

	public Visita(Propiedad propiedad, Date fechaRegistro,
			Date fechaProgramada, Date fechaInicio, Date fechaTermino,
			Usuario agente, Persona cliente, String georeferencia,
			Boolean llegoCliente, String latitud, String longitud,
			Integer percepcion, PreguntaRealizada preguntaRealizada,
			String observacionCliente, String observacionAgente,
			String preguntaCompra, String preguntaOferta,
			BigDecimal ofertaValor) {
		super();
		this.propiedad = propiedad;
		this.fechaRegistro = fechaRegistro;
		this.fechaProgramada = fechaProgramada;
		this.fechaInicio = fechaInicio;
		this.fechaTermino = fechaTermino;
		this.agente = agente;
		this.cliente = cliente;
		this.llegoCliente = llegoCliente;
		this.latitud = latitud;
		this.longitud = longitud;
		this.percepcion = percepcion;
		this.observacionAgente = observacionAgente;
		this.observacionCliente = observacionCliente;
		this.ofertaValor = ofertaValor;

	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public Propiedad getPropiedad() {
		return propiedad;
	}

	public void setPropiedad(Propiedad propiedad) {
		this.propiedad = propiedad;
	}

	public void setAgente(Usuario agente) {
		this.agente = agente;
	}

	public Persona getCliente() {
		return cliente;
	}

	public void setCliente(Persona cliente) {
		this.cliente = cliente;
	}

	public String getLatitud() {
		return latitud;
	}

	public void setLatitud(String latitud) {
		this.latitud = latitud;
	}

	public String getLongitud() {
		return longitud;
	}

	public void setLongitud(String longitud) {
		this.longitud = longitud;
	}

	public Date getFechaRegistro() {
		return fechaRegistro;
	}

	public void setFechaRegistro(Date fechaRegistro) {
		this.fechaRegistro = fechaRegistro;
	}

	public Date getFechaProgramada() {
		return fechaProgramada;
	}

	public void setFechaProgramada(Date fechaProgramada) {
		this.fechaProgramada = fechaProgramada;
	}

	public Date getFechaInicio() {
		return fechaInicio;
	}

	public void setFechaInicio(Date fechaInicio) {
		this.fechaInicio = fechaInicio;
	}

	public Date getFechaTermino() {
		return fechaTermino;
	}

	public void setFechaTermino(Date fechaTermino) {
		this.fechaTermino = fechaTermino;
	}

	public Boolean getLlegoCliente() {
		return llegoCliente;
	}

	public void setLlegoCliente(Boolean llegoCliente) {
		this.llegoCliente = llegoCliente;
	}

	public Usuario getAgente() {
		return agente;
	}

	public Integer getPercepcion() {
		return percepcion;
	}

	public void setPercepcion(Integer percepcion) {
		this.percepcion = percepcion;
	}

	public List<PreguntaRealizada> getPreguntasRealizadas() {
		return preguntasRealizadas;
	}

	public void setPreguntasRealizadas(
			List<PreguntaRealizada> preguntasRealizadas) {
		this.preguntasRealizadas = preguntasRealizadas;
	}

	public String getObservacionCliente() {
		return observacionCliente;
	}

	public void setObservacionCliente(String observacionCliente) {
		this.observacionCliente = observacionCliente;
	}

	public String getObservacionAgente() {
		return observacionAgente;
	}

	public void setObservacionAgente(String observacionAgente) {
		this.observacionAgente = observacionAgente;
	}

	public String getPreguntaCompra() {
		return preguntaCompra;
	}

	public void setPreguntaCompra(String preguntaCompra) {
		this.preguntaCompra = preguntaCompra;
	}

	public String getPreguntaOferta() {
		return preguntaOferta;
	}

	public void setPreguntaOferta(String preguntaOferta) {
		this.preguntaOferta = preguntaOferta;
	}


	public BigDecimal getOfertaValor() {
		return ofertaValor;
	}

	public void setOfertaValor(BigDecimal ofertaValor) {
		this.ofertaValor = ofertaValor;
	}


}
